#include "Mapa.h"

Mapa::Mapa(Punto punto, int filas, int columnas)
{
	Padre=CIndieLib::Instance();
	m_punto=punto;
	m_rows=filas;
	m_columns=columnas;
	m_size=30;
	for(int a=0; a<m_rows; ++a)
		{
			vector<Cuadrado*> cv;
			for(int b=0; b<m_columns; ++b)
			{
				cv.push_back(new Cuadrado(Punto((b*m_size)+m_punto.px,(a*m_size)+m_punto.py),m_size) );
			}
			m_grilla.push_back(cv);

		}
}
void Mapa :: iniciar()
{
for(int a=0; a<m_rows; ++a)
	{
			for(int b=0; b<m_columns; ++b)
		{
			analizar_vecinos(a,b);
			if(m_grilla[a][b]->get_state() == false)
			{
				if(m_grilla[a][b]->cantidad_vecinos()>= 3)
					m_grilla[a][b]->on();
				else
					m_grilla[a][b]->off();
			}
			if (m_grilla[a][b]->get_state() == true)
			{
				if(m_grilla[a][b]->cantidad_vecinos() == 2 || m_grilla[a][b]->cantidad_vecinos() == 3)
					m_grilla[a][b]->on();
				else
					m_grilla[a][b]->off();
			}		
		}
}	
	
}
Mapa::~Mapa(void)
{
}


void Mapa::analizar_vecinos(int fila, int columna)
{
	if(fila-1 >= 0 && columna-1 >= 0)
		if((m_grilla[fila][columna]->get_state()))
			m_grilla[fila][columna]->m_vecinos++;
	if(fila-1 >= 0)
		if(m_grilla[fila-1][columna] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;
	if(fila-1 >= 0 && columna+1 <= m_columns-1)
		if(m_grilla[fila-1][columna+1] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;
	if(columna-1 >= 0)
		if(m_grilla[fila][columna-1] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;
	if(columna+1 <= m_columns-1)
		if(m_grilla[fila][columna+1] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;
	if(fila+1 <= m_rows-1 && columna-1 >= 0)
		if(m_grilla[fila+1][columna-1] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;
	if(fila+1 <= m_rows-1)
		if(m_grilla[fila+1][columna] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;
	if(fila+1 <= m_rows-1 && columna+1 <= m_columns-1)
		if(m_grilla[fila+1][columna+1] ->get_state())
			m_grilla[fila][columna]->m_vecinos++;

}
